//
//  main.m
//  KVC的简单使用
//
//  Created by 伍银荣 on 2021/6/10.
//  Copyright © 2021 com.example. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"


/*
 1.使用KVC(key-value-coding):键值编码,可以设置对象的属性值,也可以获取对象的属性值
 2.kvc也可以访问真私有属性的值,不管是通过带下划线还是不带下划线,都可以设置这个属性的值
 3.使用forKeyfor:方法只能设置获取取到单层对象的属性,但是forKeyPath:方法可以设置或者获取到有层级的属性(属性的属性)
 3.创建一个字典对象,通过setValuesForKeysWithDictionary:方法为对象赋值
 4.通过dictionaryWithValuesForKeys:方法可以将对象转成字典
 */

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        Dog *dog = [[Dog alloc]init];
//        //[dog setValue:@"哈士奇" forKey:@"name"];
//
//        [dog setValue:@"泰迪" forKey:@"_name"];
//        [dog info];
        
//        Dog *dog = [[Dog alloc]init];
//        [dog setValue:@"泰迪" forKey:@"_name"];
//        [dog setValue:@2 forKey:@"_age"];
//        [dog info];
        
      
        
        
//        Person *p1 = [[Person alloc]init];
//
//        Dog *d1 = [[Dog alloc]init];
//
//
//        [p1 setValue:d1 forKeyPath:@"dog"];
//       // [d1 setValue:@"泰迪" forKeyPath:@"name"];
//        //键名使用对象.属性的方式必须使用keyPath这个方法,forKey这个方法不行
//        [p1 setValue:@"泰迪" forKeyPath:@"dog.name"];
//        NSLog(@"dog = %@",p1.dog.name);
////        [p1 setValue:@"123@qq.com" forKeyPath:@"_email"];
//        [p1 setValue:@"123@qq.com" forKeyPath:@"email"];
//        [p1 setValue:@"张三" forKeyPath:@"_name"];
//        [p1 setValue:@23 forKeyPath:@"_age"];
//        [d1 setValue:@"哈士奇" forKeyPath:@"name"];
//        [d1 setValue:@2 forKey:@"age"];
//
//       // [d1 info];
//        [p1 perInfo];
//
//        NSString *name = [p1 valueForKey:@"name"];
//        NSLog(@"----name = %@",name);
        
        
        //创建一个字典,通过setValuesForKeysWithDictionary:方法为对象赋值
//        NSDictionary *dict = @{
//                               @"name" : @"张三",
//                               @"age" : @12,
//                               @"_email" : @"12345@163.com"
//                               };
//        Person *p1 = [[Person alloc]init];
//        [p1 setValuesForKeysWithDictionary:dict];
//        [p1 perInfo];
        
        
        
        
        //将对象转成字典
        Person *p1 = [[Person alloc]init];
        p1.name = @"张三";
        p1.age = 13;
        
      NSDictionary *dict = [p1 dictionaryWithValuesForKeys:@[@"name", @"age"]];
        NSLog(@"dict = %@",dict);
        
        
    }
    return 0;
}
